Redex

F8이 한참이라 facebook 프로젝트가 올라왔습니다. 작년 react-native를 발표할 때의 분위기와는 한층 다른 거 같지만 재미있는 오픈 소스 프로젝트가 github 의 수위권을 차지했습니다.

2014/04/14 Editor’s choice

facebook/redex
_redex - A bytecode optimizer for Android apps_github.com

바로 redex - 안드로이드 bytecode 최적화 도구입니다.

설치

설치 전 의존성 있는 모듈들을 먼저 설치 합니다.

Mac 기준으로는

brew install autoconf automake libtool python3  
brew install boost double-conversion gflags glog libevent

repository를 직접 다운 받은 후에

submodule 이 존재하네요

git submodule update --init

autoreconf -ivf && ./configure && make && make install

실행

redex path/to/your.apk -o path/to/output.apk

어떻게 가능해 졌을까?

관련해서 잘 설명되어져 있는 블로그를 소개합니다.

Optimizing Android bytecode with ReDex
_As more and more people around the world start logging on to Facebook, we have an increasingly large responsibility to…_code.facebook.com

간단하게만 설명드리면

안드로이드는 Java 아키텍쳐를 가져가기 때문에 다음 그림의 bytecode를 먼저 생성하게 됩니다.

하지만 .class 파일을 그대로 쓰는게 아니라 dex 파일을 거쳐 apk파일로 변경하게 됩니다.

dex는 dalvik 에서 이해하는 executable format 입니다. 말하자면 Java class 파일들을 dalvik의 실행환경으로 변환 및 압축한 뒤에 안드로이드용 패키지 파일로 묶어주는 일을 일반적인 안드로이드 컴파일 환경이 실행해 주고 있었다. 라고 이해 하시면 됩니다.

여기서 dex파일을 최적화 하는 일을 하는 프로그램을 오픈소스로 풀었다는 것입니다.

https://code.facebook.com/posts/1480969635539475/optimizing-android-bytecode-with-redex

transform 세가지는 다음과 같습니다.

  1. Minification and compression
  2. Inlining
  3. Dead code elimination

https://code.facebook.com/posts/1480969635539475/optimizing-android-bytecode-with-redex

https://code.facebook.com/posts/1480969635539475/optimizing-android-bytecode-with-redex

https://code.facebook.com/posts/1480969635539475/optimizing-android-bytecode-with-redex

모든 좋은 코드를 위한 노력은 대강 비슷한데 줄이고, 줄이고 또 줄이고 네요.

현장에서 개발을 할때 1번의 경우는 소스코드 난독화 툴들을 사용하니까 그다지 쓸모 있을까 싶은데, 2번 3번은 매우 유용할 거 같다는 생각이 듭니다.

반대로 apk파일 사이즈에 직접 영향을 주는 건 1번일 확률이 높으니까 잘 만들어진 코드들에서는 크게 의미가 없을 수도 있다는 생각도 드는군요.

By Keen Dev on April 13, 2016.

Exported from Medium on May 31, 2017.